package client.coordinador;

import static org.stjs.javascript.JSCollections.$array;

import org.stjs.javascript.Array;

import client.common.EndPoints.CoordinadorEP;
import client.common.Models.CalendarioAcademico;
import client.common.Models.Periodo;
import client.common.angular.NgScope;
import client.common.directives.EPLoading;
import client.common.javascript.JsWindow;

public class AdminCalendarioScope extends NgScope {

	private CalendarioAcademico calendario;
	private CoordinadorEP coordinadorEP;
	private EPLoading epLoading;

	public AdminCalendarioScope(JsWindow $window,
			CoordinadorEP Coordinador, EPLoading epLoading) {
		super("AdminCalendarioScope");

		this.calendario = Coordinador.getCalendarioAcademicoActual();
		this.coordinadorEP = Coordinador;
		this.epLoading = epLoading;
	}

	public void actualizarFechasCalendario() {
		if (this.calendario.numPeriodos > 0) {
			this.calendario.periodos.$get(0).fechaInicio = this.calendario.fechaInicio;
			this.calendario.periodos.$get(this.calendario.numPeriodos - 1).fechaFin = this.calendario.fechaFin;
		}
	}

	public void guardar() {
		epLoading.$invoke(this.coordinadorEP.updateCalendarioAcademico(
				this.calendario.id, this.calendario), "#form");
	}

	public void actualizarPeriodos() {
		this.calendario.periodos = $array();
		for (int i = 0; i < this.calendario.numPeriodos; i++)
			this.calendario.periodos.push(new Periodo());
		this.actualizarFechasCalendario();
	}

	public void inicioPeriodoActualizado(int $index, long fechaInicio) {
		Periodo periodo = this.calendario.periodos.$get($index);
		if ($index == 0)
			this.calendario.fechaInicio = periodo.fechaInicio;
		else
			this.calendario.periodos.$get($index - 1).fechaFin = periodo.fechaInicio;
	}

	public void finPeriodoActualizado(int $index, long fechaFin) {
		Periodo periodo = this.calendario.periodos.$get($index);
		if ($index == this.calendario.numPeriodos - 1) {
			this.calendario.fechaFin = periodo.fechaFin;
		} else
			this.calendario.periodos.$get($index + 1).fechaInicio = periodo.fechaFin;

	}

	public static Array<String> $inject() {
		return $array("$window", "Coordinador", "epLoading");
	}

}
